MySQL MySQL道普請便り 履歴
#MySQL
このブログがめちゃくちゃ有用なので読むことが多い。読んだ履歴をここに残しておく。
MySQL道普請便り 記事一覧 | gihyo.jp
第107回 CREATE TEMPORARY TABLEによる一時テーブルの利用 | gihyo.jp
Temporary付きで作成されたテーブルは、セッションのみ存在できるものになる。
一時テーブル作成のためには権限(CREATE TEMPORARY TABLES)が必要。
InnoDBで一時テーブル作成する場合、innodb_strict_mode=ONでROW_FORMAT=COMPPRESSEDだと作成できないので注意。
一時テーブルを利用する場合、レプリケーションとの関係に注意すること
BINLOG_FORMAT=STATEMENTの時に注意が必要(mysql 8以上)
参考:MySQL :: MySQL 8.0 リファレンスマニュアル :: 17.5.1.31 レプリケーションと一時テーブル
注意.icon mysql5.6とかだと話が変わる...
第126回 MySQLへの書き込みを制限するさまざまな方法 | gihyo.jp
read_only:super権限を持ったユーザー以外の書き込みを禁止する
super_read_only:super権限を持ったユーザーの書き込みも禁止する
注意:
こいつらをONにした際、書き込み中のDMLがあると、それらの処理は待機になる。そして、wait_timeoutを超えてタイムアウトになる。
ただし、読み込みDMLやトランザクション内のステートメントは待機にならない。
なので、書き込みDMLが無いタイミングで変更したほうがいい
innodb_read_only:InnoDBストレージエンジンで作成されたテーブルに対して、書き込みDMLを禁止する
なお、これは再起動しないと変更できないので注意。
OFFLINE_MODE:ONになったタイミングから、以降の接続は拒否され、実行中の書き込みもロールバック、接続中のスレッドは全て切断される。
第129回 Internal Temporary Table(内部テンポラリテーブル)について[その1] | gihyo.jp
内部テンポラリテーブル:ステートメントを処理するための最適化や結果を保持しておくために用いられる内部的に作成されるテーブル。ユーザーが制御することは不可能。
仕組みとしては...
特定のステートメントの動作中にインメモリテンポラリテーブルを作成して利用。
それ以上のサイズが必要になる場合、ディスクテンポラリテーブルに変換される。
対象ステートメントが内部テンポラリテーブルを使用するのかは、EXPLAINで確認する。
extra列にUsing temporaryが表示されてるなら、内部テンポラリテーブルが作成されてる。
select_type列にDERIVED, SUBQUERY, MATERIALIZEがあるなら、内部テンポラリテーブルが作成されてる。
内部テンポラリテーブルに利用されるストレージエンジンは、メジャーバージョンによって異なるので注意が必要。
8からはTempTableストレージエンジンがデフォルトで利用されてる。
参考:最近のMySQL 8.0 の内部一時テーブルの改善について – スマートスタイル技術ブログ